#ifndef _NV_PRIVATE_H_
#define _NV_PRIVATE_H_

/// <summary>
/// INCLUDES
/// </summary>
#include <nouveau_bo.h>
#include <nouveau_channel.h>
#include <nouveau_pushbuf.h>
#include <nouveau_notifier.h>
#include <nouveau_device.h>

/// <summary>
/// The Context structure
/// describes a kernel-mode device
/// context to create.
/// </summary>
typedef struct _NV50Private
{
	int handle;
	struct nouveau_device *device;
	struct nouveau_channel *channel;
	struct nouveau_notifier *notify0;
	struct nouveau_bo *tesla_scratch;
	struct nouveau_bo *shader_mem;

} NV50Private, *NV50PrivatePtr;

/// <summary>
/// MACROS
/// </summary>
#define NV_BO(ptr) ((struct nouveau_bo *)ptr)
#define NV_DEVICE(ptr) ((struct nouveau_device *)ptr)
#define NV_PRIVATE(ptr) ((NV50PrivatePtr)ptr->private)
#define NV_CHANNEL(ptr) (NV_PRIVATE(ptr)->channel)

/// <summary>
/// NVIDIA Pipeline
/// </summary>
int NVInitDma(DriverPtr drv);
int NVInitDisplays(DriverPtr drv, int handle);

#endif